package acwing._2LanQiao._6DoublePointer_BFS_Graph;
/**
 * @Project : ProgrammingExercises
 * @Package : ACWing._2LanQiao._6DoublePointer_BFS_Graph
 * @File : Q1233.java
 * @Author : WangRuoyu
 * @Date : 2023/3/19 16:07
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;

public class Q1233 {
    static int[][] A;

    static int n;

    static int k = 0;

    static void bfs(int s) {
        Queue<Integer> q = new LinkedList<>();
        q.add(s);
        boolean st = true;
        while (!q.isEmpty()) {
            int node = q.poll();
            int x = node / n;
            int y = node % n;
            int num = 0;
            if (x > 0) {
                if (A[x - 1][y] == -1) {
                    q.add((x - 1) * n + y);
                    A[x - 1][y] = 1;
                }
                if (A[x - 1][y] != 0) {
                    num++;
                }
            }
            if (x < n - 1) {
                if (A[x + 1][y] == -1) {
                    q.add((x + 1) * n + y);
                    A[x + 1][y] = 1;
                }
                if (A[x + 1][y] != 0) {
                    num++;
                }
            }
            if (y > 0) {
                if (A[x][y - 1] == -1) {
                    q.add(x * n + y - 1);
                    A[x][y - 1] = 1;
                }
                if (A[x][y - 1] != 0) {
                    num++;
                }
            }
            if (y < n - 1) {
                if (A[x][y + 1] == -1) {
                    q.add(x * n + y + 1);
                    A[x][y + 1] = 1;
                }
                if (A[x][y + 1] != 0) {
                    num++;
                }
            }
            if (num == 4) {
                st = false;
            }
        }
        if (st) {
            k++;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = br.readLine();
        n = Integer.parseInt(line);

        A = new int[n][n];

        for (int i = 0; i < n; ++i) { // 输入数据
            line = br.readLine();
            for (int j = 0; j < n; ++j) {
                if (line.charAt(j) == '.') {
                    A[i][j] = 0;
                } else {
                    A[i][j] = -1;
                }
            }
        }

        for (int i = 0; i < n; ++i) { // 查找连通块数量并标记
            for (int j = 0; j < n; ++j) {
                if (A[i][j] == -1) {
                    bfs(i * n + j);
                }
            }
        }

        System.out.println(k);
    }
}

//public class Q1233 {
//    static int[][] A;
//
//    static int n;
//
//    static void bfs(int s, int k) {
//        Queue<Integer> q = new LinkedList<>();
//        q.add(s);
//        int x = s / n;
//        int y = s % n;
//        A[x][y] = k;
//        while (!q.isEmpty()) {
//            int node = q.poll();
//            x = node / n;
//            y = node % n;
//            if (x > 0 && A[x - 1][y] == -1) {
//                q.add((x - 1) * n + y);
//                A[x - 1][y] = k;
//            }
//            if (x < n - 1 && A[x + 1][y] == -1) {
//                q.add((x + 1) * n + y);
//                A[x + 1][y] = k;
//            }
//            if (y > 0 && A[x][y - 1] == -1) {
//                q.add(x * n + y - 1);
//                A[x][y - 1] = k;
//            }
//            if (y < n - 1 && A[x][y + 1] == -1) {
//                q.add(x * n + y + 1);
//
//                A[x][y + 1] = k;
//            }
//        }
//    }
//
//    public static void main(String[] args) throws IOException {
//        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//        String line = br.readLine();
//        n = Integer.parseInt(line);
//
//        A = new int[n][n];
//
//        for (int i = 0; i < n; ++i) { // 输入数据
//            line = br.readLine();
//            for (int j = 0; j < n; ++j) {
//                if (line.charAt(j) == '.') {
//                    A[i][j] = 0;
//                } else {
//                    A[i][j] = -1;
//                }
//            }
//        }
//
//        int k1 = 0;
//        for (int i = 0; i < n; ++i) { // 查找连通块数量并标记
//            for (int j = 0; j < n; ++j) {
//                if (A[i][j] == -1) {
//                    k1++;
//                    bfs(i * n + j, k1);
//                }
//            }
//        }
//
//        for (int i = 0; i < n; ++i) { // 淹没操作
//            for (int j = 0; j < n; ++j) {
//                if (A[i][j] == 0) {
//                    if (i > 0 && A[i - 1][j] > 0) {
//                        A[i - 1][j] = -1;
//                    }
//                    if (i < n - 1 && A[i + 1][j] > 0) {
//                        A[i + 1][j] = -1;
//                    }
//                    if (j > 0 && A[i][j - 1] > 0) {
//                        A[i][j - 1] = -1;
//                    }
//                    if (j < n - 1 && A[i][j + 1] > 0) {
//                        A[i][j + 1] = -1;
//                    }
//                }
//            }
//        }
//
//        int k2 = 0;
//        boolean[] v = new boolean[k1 + 1];
//
//        for (int i = 0; i < n; ++i) {
//            for (int j = 0; j < n; ++j) {
//                if (A[i][j] > 0 && !v[A[i][j]]) {
//                    k2++;
//                    v[A[i][j]] = true;
//                }
//            }
//        }
//
//        System.out.println(k1 - k2);
//    }
//}